home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1995 / MacHack 1995.toast / Presentations / Presentations ’88 / Feldt's Object Stuff / objectMgr stuff / SSG.c < prev    next >
Text File  |  1987-03-11  |  6KB  |  227 lines

  1. /*                          Small Systems Guild                                */
  2.  
  3. /*                   copyright © 1987 Small Systems Guild                         */
  4. /*                       Lightspeed C compiler 2.01                            */
  5.  
  6. /*                       private library source file                            */
  7.  
  8. /*    DAS    02/10/87    Created this file, added SetShell()                    0.1    */
  9. /*    DAF    02/11/87    Added CountWindows(), DoDlog(), ZoomRect(),            0.2    */
  10. /*                    GlobalCellRect(),                                         */
  11. /*    DAS    02/16/87    Fixed ZoomRect() globalism bug                        0.3    */
  12. /*    DAF    03/05/87    Added app launch list support routines, structs        0.4    */
  13. /*    DAF    03/09/87    Added WDPBRec definition, restructured LaunchInfo    0.5    */
  14.  
  15. #include    <interchange.h>
  16.  
  17. int ByteCopy(toPtr,fromPtr,count)
  18. char    *toPtr,*fromPtr;
  19. int        count;
  20. {
  21.     int        i,bytes = 0;
  22.  
  23.     for (i = 0;i < count;i++) {
  24.         toPtr[i] = fromPtr[i];
  25.         bytes++;
  26.     }
  27.     return(bytes);
  28. }
  29.  
  30. Boolean    SetShell(progName)
  31. char        *progName;
  32. {
  33.     int        charCount,i;
  34.     char    *shellBuff;
  35.  
  36.     charCount = (unsigned char)(progName[0]);
  37.     if ((charCount > SHELLmaxname) || (charCount == 0))
  38.         return(FALSE);
  39.  
  40.     /* should really check for an application with this name... */
  41.     /* but that's too tough, for now! */
  42.  
  43.     shellBuff = (char *)FinderName;
  44.     for (i=0; i<=charCount; i++)
  45.         *shellBuff++ = *progName++;
  46.     for ( ; i<=SHELLmaxname; i++)
  47.         *shellBuff++ = ' ';
  48.  
  49.     return(TRUE);
  50. }
  51.  
  52. int DoDlog(dialogNum,topItem)
  53. int     dialogNum,topItem;
  54. {
  55.     DialogPtr    DP;
  56.     Handle        H;
  57.     int            i = 0;
  58.  
  59.     H = GetResource('DLOG',dialogNum);
  60.     if ((!ValidHandle((Handle)H)) || (ResError() != noErr))
  61.         return(0);
  62.  
  63.     DP = GetNewDialog(dialogNum,NULL,NEG_ONE);    /* read dialog from resource fork     */
  64.     if ((ResError() == noErr) && ValidPointer((Ptr)DP)) {    /* dialog found         */
  65.         ShowWindow(DP);                    /* make sure dialog window is made visible    */
  66.         FrameDItem(DP,1);
  67.         do {
  68.             ModalDialog(NULL,&i);        /* loop in Dialog manager until item hit    */
  69.             CheckDItem(DP,i);
  70.         } while (i == 0 || i > topItem);
  71.         DisposDialog(DP);                /* throw away dialog, reclaim memory        */
  72.         return(i);                        /* return dialog item number selected        */
  73.     }
  74.     else
  75.         return(0);                        /* dialog not found in open resource forks    */
  76. }
  77.  
  78. void ZoomRect(aWindow,aRect,direction)
  79. WindowPtr    aWindow;
  80. Rect        *aRect;
  81. Boolean        direction;
  82. {
  83.     Rect    wRect;
  84.  
  85.     if (!ValidPointer((Ptr)aWindow) || !ValidPointer((Ptr)aRect))
  86.         RETURN;
  87.     wRect = aWindow->portRect;
  88.     LocalToGlobal(&(topLeft(wRect)));        /* global coordinates for rectangle */
  89.     LocalToGlobal(&(botRight(wRect)));
  90.  
  91.     if (direction) {
  92.         Telescope(aRect,&wRect,16);
  93.         ShowWindow(aWindow);
  94.         SelectWindow(aWindow);
  95.     }
  96.     else {
  97.         Telescope(&wRect,aRect,16);
  98.     }
  99. }
  100.  
  101. void GlobalCellRect(aWindow,list,cell,theRect)
  102. WindowPtr        aWindow;
  103. ListHandle        list;
  104. Point            cell;
  105. Rect            *theRect;
  106. {
  107.     GrafPtr    savePort;
  108.     Rect    iRect;
  109.     Cell    tCell;
  110.  
  111.     if (!ValidHandle((Handle)list))
  112.         RETURN;
  113.  
  114.     LRect(&iRect,pass(cell),list);
  115.     GetPort(&savePort);
  116.     SetPort(aWindow);
  117.     LocalToGlobal(&(topLeft(iRect)));        /* global coordinates for rectangle */
  118.     LocalToGlobal(&(botRight(iRect)));
  119.     SetPort(savePort);
  120.     *theRect = iRect;
  121. }
  122.  
  123. int CountWindows()
  124. {
  125.     WData        WD;
  126.     WindowPtr    currWP;
  127.     int            howMany;
  128.  
  129.     currWP = FrontWindow();
  130.     howMany = 0;
  131.     while (ValidPointer((Ptr)currWP)) {
  132.         GetWData(currWP,&WD);
  133.         if (ValidWData(&WD)) {
  134.             if (((WindowPeek)currWP)->visible) {
  135.                 howMany++;
  136.             }
  137.         }
  138.         currWP = (WindowPtr)(((WindowPeek)currWP)->nextWindow);
  139.     }
  140.     return(howMany);
  141. }
  142.  
  143. WindowPtr InsertWindow(wrPtr,place,wRect,Title,wType,Visible,GoAwayBox,GrowBox,vScrollBar,hScrollBar)
  144. WindowRecord    *wrPtr;
  145. WindowPtr        place;
  146. Rect            *wRect;
  147. char            *Title;
  148. int                wType;
  149. Boolean            Visible,GoAwayBox,GrowBox,vScrollBar,hScrollBar;
  150. {
  151.     WData        WD;
  152.     WDHandle     tempWDH;
  153.     WindowPtr    oldFrontW;
  154.     Rect        boundsRect;
  155.  
  156.     boundsRect = *wRect;
  157.     if ((wType < 0) || (wType > 23) ||
  158.             ((wType > 4) && (wType < 16) && (wType != 8) && (wType != 12)))
  159.         return(NULL);
  160.                                     /* make conflicting window types consistent    */
  161.     if ((GrowBox == FALSE) && (wType == 0))
  162.         wType = 4;
  163.     if ((GrowBox != FALSE) && (wType == 4))
  164.         wType = 0;
  165.     if ((GrowBox == FALSE) && (wType == 8))
  166.         wType = 12;
  167.     if ((GrowBox != FALSE) && (wType == 12))
  168.         wType = 8;
  169.  
  170.     oldFrontW = FrontWindow();
  171.  
  172.     wrPtr = (WindowRecord *)NewWindow(wrPtr,&boundsRect,Title,FALSE,wType,place,GoAwayBox,NULL);
  173.     if (!ValidPointer((Ptr)wrPtr))
  174.         return(NULL);
  175.  
  176.     InitWData(&WD);
  177.     WD.GrowBox = GrowBox;
  178.     if (GrowBox)
  179.         DrawGrowIcon(wrPtr);
  180.     if (vScrollBar) {
  181.         boundsRect.left = ((WindowPtr)wrPtr)->portRect.right - XTBarWidth;
  182.         boundsRect.top = ((WindowPtr)wrPtr)->portRect.top - 1;
  183.         boundsRect.right = ((WindowPtr)wrPtr)->portRect.right + 1;
  184.         boundsRect.bottom = ((WindowPtr)wrPtr)->portRect.bottom - 
  185.                                 ((WindowPtr)wrPtr)->portRect.top;
  186.         if (GrowBox)
  187.             boundsRect.bottom -= 14;
  188.         WD.vScrollBar = NewControl(wrPtr,&boundsRect,"\P",Visible,1,1,100,scrollBarProc,NULL);
  189.     }
  190.     if (hScrollBar) {
  191.         boundsRect.left = ((WindowPtr)wrPtr)->portRect.left - 1;
  192.         boundsRect.top = ((WindowPtr)wrPtr)->portRect.bottom - XTBarWidth;
  193.         boundsRect.right = ((WindowPtr)wrPtr)->portRect.right;
  194.         if (GrowBox || vScrollBar)
  195.             boundsRect.right -= 14;
  196.         boundsRect.bottom = ((WindowPtr)wrPtr)->portRect.bottom + 1;
  197.         WD.hScrollBar = NewControl(wrPtr,&boundsRect,"\P",Visible,1,1,100,scrollBarProc,NULL);
  198.     }
  199.     tempWDH = (WDHandle)NewHandle((long)sizeof(WData));
  200.     SetWRefCon(wrPtr,tempWDH);
  201.     if (!ValidHandle((Handle)tempWDH))
  202.         return(NULL);
  203.     (**tempWDH).sync1 = SYNC1VAL;
  204.     (**tempWDH).sync2 = SYNC2VAL;
  205.     SetWData((WindowPtr)wrPtr,&WD);
  206.  
  207.     if (!Visible)
  208.         return((WindowPtr)wrPtr);
  209.  
  210.     ShowHide(wrPtr,TRUE);
  211.     SetPort(wrPtr);
  212.  
  213.     if (ValidPointer((Ptr)oldFrontW)) {
  214.         GetWData(oldFrontW,&WD);
  215.         if (ValidWData(&WD)) {
  216.             if (WD.GrowBox)
  217.                 DrawGrowIcon(oldFrontW);
  218.             if (ValidHandle((Handle)(WD.vScrollBar)))
  219.                 HideControl(WD.vScrollBar);
  220.             if (ValidHandle((Handle)(WD.hScrollBar)))
  221.                 HideControl(WD.hScrollBar);
  222.         }
  223.     }
  224.  
  225.     return((WindowPtr)wrPtr);
  226. }
  227.